#ifndef SCALEDLABEL_H
#define SCALEDLABEL_H

#include <QLabel>
#include <QResizeEvent>
#include <QPixmap>

class ScaledLabel : public QLabel
{
    Q_OBJECT
public:
    explicit ScaledLabel(QWidget *parent = nullptr) : QLabel(parent)
    {
        setScaledContents(false); // 禁用自动缩放，使用自定义缩放逻辑
        setMinimumSize(0, 0); // 允许缩小到任意尺寸
        setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); // 允许在布局中扩展
    }

    // 重写setPixmap，存储原始图片并触发缩放
    void setPixmap(const QPixmap &pix)
    {
        m_originalPix = pix; // 直接存储QPixmap对象（栈变量赋值）
        updateScaledPixmap();
    }

protected:
    // 尺寸变化时重新缩放图片
    void resizeEvent(QResizeEvent *event) override
    {
        Q_UNUSED(event);
        updateScaledPixmap();
        QLabel::resizeEvent(event);
    }

    // 支持布局调整时的尺寸提示
    QSize sizeHint() const override
    {
        if (!m_originalPix.isNull()) {
            return m_originalPix.size(); // 原始图片尺寸作为默认提示
        }
        return QLabel::sizeHint();
    }

    // 最小尺寸提示（保证比例）
    QSize minimumSizeHint() const override
    {
        if (m_minAspectRatio > 0 && !m_originalPix.isNull()) {
            // 根据比例返回最小尺寸
            return QSize(100, 100/m_minAspectRatio);
        }
        return QSize(0, 0); // 允许无限缩小
    }

private:
    QPixmap m_originalPix; // 原始图片（栈变量）
    double m_minAspectRatio = 0; // 最小宽高比（可选）

    // 更新缩放后的图片
    void updateScaledPixmap()
    {
        if (m_originalPix.isNull()) return;

        // 获取当前标签的可用尺寸（已考虑边框等）
        QSize currentSize = size();

        // 计算保持比例的缩放尺寸
        QSize scaledSize = m_originalPix.size().scaled(currentSize, Qt::KeepAspectRatio);

        // 设置缩放后的图片
        QLabel::setPixmap(m_originalPix.scaled(
            scaledSize,
            Qt::KeepAspectRatio,
            Qt::SmoothTransformation
            ));
    }
};

#endif // SCALEDLABEL_H
